<?php
namespace app\forum\model;
use app\base\model\BaseModel;
/**
 * 板块操作
 */
class PlateModel extends BaseModel {
    //完成
    protected $_auto = array (
        array('sequence','intval',3,'function'),
        array('name','htmlspecialchars',3,'function'),
        array('plate_id','intval',2,'function'),
     );
    //验证
    protected $_validate = array(
        array('name','1,200', '板块名称只能为1~200个字符', 1 ,'length'),
        array('plate_id','require', '板块ID获取不正确', 1 ,'regex',2),
        array('parent_id','parentCheck', '上级板块关系选择错误', 1 ,'callback',2),
    );

    /**
     * 获取列表
     * @return array 列表
     */
    public function loadList($where = array(), $plateId=0){
        $data = $this->loadData($where);
        $cat = new \framework\ext\Category(array('plate_id', 'parent_id', 'name', 'cname'));
        $data = $cat->getTree($data, intval($plateId));
        //获取内容模型
        $modelList = get_all_service('Model','Forum');
        if(!empty($data)){
            foreach ($data as $key => $value) {
                $modelInfo = $modelList[$value['app']];
                $data[$key]['model_name'] = $modelInfo['name'];
            }
        }
        return $data;
    }

    /**
     * 获取列表
     * @return array 列表
     */
    public function loadData($where = array(), $limit = 0 ,$order="sequence ASC , plate_id ASC"){
        $pageList = $this->where($where)->limit($limit)->order($order)->select();
        $list = array();
        if(!empty($pageList)){
            $i = 0;
            foreach ($pageList as $key=>$value) {
                $list[$key]=$value;
                $list[$key]['app'] = strtolower($value['app']);
                $list[$key]['curl'] = target('forum/Plate')->getUrl($value);
                $list[$key]['i'] = $i++;
            }
        }
        return $list;
    }



    /**
     * 获取内容模型
     * @return array 列表
     */
    public function getModel(){
        $list = get_all_service('Model','Forum');
        return array_order($list, 'order', 'asc', true);
    }

    /**
     * 获取板块数量
     * @return array 列表
     */
    public function countList($where = array()){
        return $this->where($where)->count();
    }

    /**
     * 获取信息
     * @param int $plateId ID
     * @return array 信息
     */
    public function getInfo($plateId)
    {
        $map = array();
        $map['plate_id'] = $plateId;
        return $this->getWhereInfo($map);
    }

    /**
     * 获取信息
     * @param array $where 条件
     * @return array 信息
     */
    public function getWhereInfo($where)
    {
        $info = $this->where($where)->find();
        if(!empty($info)){
            $info['app'] = strtolower($info['app']);
            $info['purview'] = unserialize($info['purview']);
        }
        return $info;
    }

    /**
     * 更新信息
     * @param string $type 更新类型
     * @return bool 更新状态
     */
    public function saveData($type = 'add'){
        $data = $this->create();
        if(!$data){
            return false;
        }
        if($type == 'add'){
            return $this->add($data);
        }
        if($type == 'edit'){
            if(empty($data['plate_id'])){
                return false;
            }
            $status = $this->save();
            if($status === false){
                return false;
            }
            return true;
        }
        return false;
    }

    /**
     * 删除信息
     * @param int $plateId ID
     * @return bool 删除状态
     */
    public function delData($plateId)
    {
        $map = array();
        $map['plate_id'] = $plateId;
        return $this->where($map)->delete();
    }
    
    /**
     * 检查上级板块
     * @return string 板块拼音
     */
    public function parentCheck()
    {
        //获取变量
        $plateId = request('post.plate_id');
        $parentId = request('post.parent_id');

        //判断空上级
        if(!$parentId){
            return true;
        }
        // 分类检测
        if ($plateId == $parentId){
            $this->error = '不可以将当前板块设置为上一级板块';
            return false;
        }

        $cat = $this->loadList(array(),$plateId);
        if(empty($cat)){
            return true;
        }
        foreach ($cat as $vo) {
            if ($parentId == $vo['plate_id']) {
                $this->error = '不可以将上一级板块移动到子板块';
                return false;
            }
        }
        return true;

    }

    /**
     * 获取菜单面包屑
     * @param int $plateId 菜单ID
     * @return array 菜单表列表
     */
    public function loadCrumb($plateId)
    {
        $data = $this->loadData();
        $cat = new \framework\ext\Category(array('plate_id', 'parent_id', 'name', 'cname'));
        $data = $cat->getPath($data, $plateId);
        if(!empty($data)){
            foreach ($data as $key => $value) {
                $data[$key]['name'] = $value['name'];
                $data[$key]['url'] = $this->getUrl($value);
            }
        }
        return $data;
    }

    /**
     * 获取子板块列表
     * @param array $plateId 父级板块ID
     * @return array 板块列表
     */
    public function getSubPlate($plateId)
    {
        return $this->loadList(array(), $plateId);
        
    }

    /**
     * 获取板块URL
     * @param int $info 板块信息
     * @return bool 删除状态
     */
    public function getUrl($info)
    {
        return url(strtolower($info['app']).'/Plate/index',array('plate_id'=>$info['plate_id']));
    }

}
